package com.zhongkai.tools;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DateManageTool {
	
	
	/**
	 * 将日期转换成年月日的数组:{1988 05 16}
	 * @param date
	 * @return
	 */
	public static int[] cutDate(Date date){
		Calendar calendar=Calendar.getInstance();
		calendar.setTime(date);
		int[] year_month_day=new int[3];
		int year=calendar.get(Calendar.YEAR);
		int month=calendar.get(Calendar.MONTH)+1;
		int day=calendar.get(Calendar.DAY_OF_MONTH);
		year_month_day[0]=year;
		year_month_day[1]=month;
		year_month_day[2]=day;
		return year_month_day;
	}
	
	//将日期的年和月合并起来:0代表年，1代表月，2代表日
	public static int getYearMon(Date date,boolean calculateMon){
		int[] dateNums=DateManageTool.cutDate(date);
		//是否将月份减一，计算出注销日期
		if(calculateMon){
			if(dateNums[1]==1){
				dateNums[1]=12;
				dateNums[0]--;
			}else dateNums[1]--;
		}		
		StringBuilder dateBuild=new StringBuilder();
		dateBuild.append(dateNums[0]);
		//将月份为1--9的数添加0，符合格式
		if(dateNums[1]/10==0){
			dateBuild.append("0");			
		}
		dateBuild.append(dateNums[1]);
		return Integer.valueOf(dateBuild.toString());
	}
	
	/*
	 * 截取时间的年月日，设置分秒为0
	 */
	public static Date changeDate(Date date){
		Calendar calendar=Calendar.getInstance();
		calendar.setTime(date);
		calendar.set(Calendar.HOUR_OF_DAY,0);
		calendar.set(Calendar.MINUTE,0);
		calendar.set(Calendar.SECOND,0);
		return calendar.getTime();
	}
	
	/**
	 * 根据plusOrminus判断日期的加或减，对于其他字符则默认不修改
	 * @param date
	 * @param plusOrminus
	 * @param n
	 * @return
	 */
	public static Date calculateDay(Date date,String plusOrminus,int n){
		Calendar   calendar=Calendar.getInstance(); 
		calendar.setTime(date); 
		if("plus".equals(plusOrminus)){
			calendar.add(Calendar.DATE,+n);
		}else if("minus".equals(plusOrminus)){
			calendar.add(Calendar.DATE,-n);
		}		 
		return calendar.getTime();
	}
	
	
	
	
	
	/*
	 * 分割时间字符串,并根据n来获取对应的数字数目
	 */
	public static String fengeDate(String date,int n){//2011-1-10
		String[] params=date.split("-");
		String dateString="";
		for(int i=0;i<n;i++)
		dateString+=params[i];
		return dateString;		
	}
	



	
	
	
	
	
	/*
	 * 时间字符串格式转换
	 */
	public  static String dateForString(Date date){
		SimpleDateFormat sqldateFormat = new SimpleDateFormat("yyyy-MM-dd");;
		return new String(sqldateFormat.format(date));//对日期进行格式化转换
	}
	
	public static String[] division(String someString){
		return someString.split("-");
	}
	
	/**
	 * 将时间格式的字符串转换成数字，并分成年和月
	 * @param dateString
	 * @return
	 */
	//截取到的月份为单数字：如月份为05----分割成-----》5
	public static int[] stringFenGe(String dateString){
		   int[] year_and_month=new int[2];
		   String dateMatch = "^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))";       
		   Pattern patt = Pattern.compile(dateMatch);
	       Matcher matcher = patt.matcher(dateString);
		   boolean match = matcher.matches();
	       if(match){
				String[] params=dateString.split("-");				
				for(int i=0;i<2;i++){
					year_and_month[i]=Integer.valueOf(params[i]);
				}
				return year_and_month;
		   }else{
			   return null;
		   }
		 } 
	/**
	 * 注销日期：将年月数组的月份减1
	 * @param year_and_month
	 * @return 200105
	 */
	public static int calculate_date(int[] year_and_month,boolean isCalculate){
		int year=year_and_month[0];
		int month=year_and_month[1];
		if(isCalculate){
			if(month==1){
				month=12;
				year--;
			}else month--;			
		}
		String year1=String.valueOf(year);
		String month1=String.valueOf(month);
		if(month1.length()==1){
			month1="0"+month1;			
		}
		return Integer.valueOf(year1+month1);
	}
	
	/**
	 * 判断日期：201108是否符合规则----->第一个数字必须大于0
	 * @param dateString
	 * @return
	 */
	public static boolean isRig(String dateString){
		   String dateMatch="^[1-9][0-9]{3}(([0][1-9])|([1][0-2]))$";
		   Pattern patt = Pattern.compile(dateMatch);
	       Matcher matcher = patt.matcher(dateString);
		   return matcher.matches();
	}

}
